package com.vvv.shortlink.project.dao.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vvv.shortlink.project.dao.entity.LinkAccessStatsDO;
import com.vvv.shortlink.project.dto.req.LinkStatsReqDTO;
import com.vvv.shortlink.project.dto.resp.LinkStatsAccessDailyRespDTO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author Dell
 * @description 针对表【t_link_access_stats】的数据库操作Mapper
 * @createDate 2024-02-20 10:48:40
 * @Entity generator.domain.LinkAccessStats
 */
public interface LinkAccessStatsMapper extends BaseMapper<LinkAccessStatsDO> {

    @Insert("INSERT INTO t_link_access_stats (full_short_url, user_id, date, pv, uv, uip, hour, weekday) " +
            "VALUES(#{linkAccessStatsDO.fullShortUrl}, #{linkAccessStatsDO.userId}, #{linkAccessStatsDO.date}, #{linkAccessStatsDO.pv}, #{linkAccessStatsDO.uv}, #{linkAccessStatsDO.uip}, #{linkAccessStatsDO.hour}, #{linkAccessStatsDO.weekday}) " +
            "ON DUPLICATE KEY UPDATE " +
            "pv = pv + #{linkAccessStatsDO.pv}, " +
            "uv = uv + #{linkAccessStatsDO.uv}, " +
            "uip = uip + #{linkAccessStatsDO.uip}")
    void monitorShortLink(@Param("linkAccessStatsDO") LinkAccessStatsDO linkAccessStatsDO);

    /**
     * 访问单个短链接指定时间内监控数据
     *
     * @param requestParam
     * @return date pv uv uip
     */
    List<LinkStatsAccessDailyRespDTO> listAccessStatsGroupByDate(@Param("requestParam") LinkStatsReqDTO requestParam);

    /**
     * 以小时分组，获取范围时间内每个小时的总访问量pv
     *
     * @param requestParam
     * @return
     */
    List<LinkAccessStatsDO> listAccessStatsGroupByHour(@Param("requestParam") LinkStatsReqDTO requestParam);

    /**
     * 获取范围时间内的总访问量pv uv uip
     * @param requestParam
     * @return
     */
    LinkAccessStatsDO getTotalPvUvUipInRangeTime(@Param("requestParam") LinkStatsReqDTO requestParam);

    /**
     * 以星期分组，获取范围时间内星期几的总访问量pv
     *
     * @param requestParam
     * @return
     */
    List<LinkAccessStatsDO> listAccessStatsGroupByWeekday(@Param("requestParam") LinkStatsReqDTO requestParam);
}




